iT邦幫忙

2026 iThome 鐵人賽

DAY 26
1
Software Development

從 C++ 菜鳥到 Low-Latency 勇者:一場分秒必爭的賽局系列 第 26 篇

[Day 26] 進度存檔 | Low-Latency 主王都冒險日誌

  • 分享至 

  • xImage
  •  

時光飛逝,轉瞬間已然到鐵人賽 Day 26 了!隨著內容愈發往底層靠近,我卻更激發出閱讀的快樂,也更有將所學融會貫通的感受。甚至覺得先前的章節比例分配得過於保守,應該預留更多篇幅給後面的硬體精髓。原來學習從不是枯燥乏味的,而是需要找到合適的開啟方式。

今天就用一段應景的小比喻,帶大家一起解鎖 Networking Optimization 的重要技術吧 :)

🥮 小故事時間 —— 月餅製作大師 Yoyo 是也!

在這個令人放鬆的中秋佳節,閃到腰的 Yoyo 只能窩在家吃月餅。閒來無事的她開始思考起了月餅的製作流程,並發現和最近在讀的 Low-Latency 概念有異曲同工之妙!

為了把月餅的傳遞延遲壓制在亞微秒級,Yoyo 大老闆在兩家獨立的工廠之間蓋了一座 shared memory 自動化傳送帶。而在前面章節逐步累積的核心知識,正是打造這條地表最快月餅流水線的關鍵:

  • Kernel Bypass —— 繞過繁雜的總公司行政審查

    在傳統的流水線中,每運送一顆月餅,工廠都必須向 Operating System Kernel 核心總公司打 system call 報告審批,並且等待對方的蓋章核對。而共享記憶體實現了核心旁路技術,直接在兩家工廠之間拉起這條祕密傳送帶。一旦開通總公司便完全不用插手,月餅直接在 user space 第一線廠區秒速互傳,徹底消滅了龐大流程帶來的時間浪費。

  • Non-Blocking I/O —— 師傅再也不用進度停擺

    在傳統工廠中,如果傳送帶上沒有月餅,負責包裝的師傅就會被迫 blocking,只能原地發呆直到下一批貨物來。這會嚴重拖累整座工廠的運轉效率。而新架構採用了非阻塞設計,當師傅看了一眼 atomic index 計數器發現目前沒有新月餅時,他會立刻回傳一個 EAGAIN 現在沒貨的訊號,讓程式可以馬上轉身去處理其他緊急的雜務。或者由 busy polling 師傅主動發起下一次的高速巡邏,把主導權牢牢握在自己手中。

  • Lock-Free + Atomic —— 拋棄過慢的 Mutex 傳統關卡

    過去兩家工廠交接月餅時,還要打電話、蓋章、等主管開門,充滿了 content switch 的成本。後來改良成在傳送帶兩端放了都放上 atomic index 自動計數器,生產者做完一個就按一下Tail++,消費者看到就拿走,全程零等待絲毫不卡頓。

  • Memory Model —— 絕對不能讓客人吃到空心月餅

    如果沒有 memory barrier,傳送帶可能會因為速度太快而發生靈異現象:計數器已經跳到下一個,但傳送帶上的月餅餡其實還沒填好。因此,Yoyo 選擇在消費者端使用 std::memory_order_acquire 盯著計數器,保證只要看到計數器跳號後續拿到的月餅絕對是「餡料填滿」的最新狀態,一絲髒資料都不允許存在。

  • Busy Polling + _mm_pause() —— 保存體力誓言守護傳送帶

    為了追求極致速度,負責包裝的師傅絕對不睡覺,而是懸樑刺股在傳送帶上進入 busy polling 無限迴圈死守,消滅行程被作業系統喚醒的等待延遲。但這樣下去師傅總會有身體吃不消的一天,_mm_pause() 就像是讓師傅在月餅還沒來時每秒稍微眨眼調息一下,這能大幅降低 CPU 的功耗並避免工廠過熱。更重要的是,當新月餅衝過來、師傅要瞬間收手出擊時,防止月餅流水線因為反應不及而引發嚴重的 pipeline flush 混亂。

  • MESI Protocol —— 隔空感應的傳送帶硬體

    員工 Y 剛把月餅放上傳送帶,透過現代 CPU 的 MESI 快取一致性協定,員工 O 面前的傳送帶就會感應式地立刻同步更新。完全不需要經過 DRAM 大倉庫,幾奈秒內就能直接開吃。

  • CPU Affinity —— 給明星麵點師發配獨立包廂

    為了不讓工廠裡的作業系統背景排程、雜訊干擾等其他雜務,影響到這對正在全神貫注傳遞月餅的師傅,Yoyo 透過 Linux 的 isolcpus 核心參數把這兩個 CPU 核心隔離成專用 VIP 包廂,讓兩位大師心無旁鶩專注飆速。


上一篇
[Day 25] HFT Networking Infrastructure: Shared Memory IPC
下一篇
[Day 27] Profiling & Tooling: Compiler Optimization
系列文
從 C++ 菜鳥到 Low-Latency 勇者:一場分秒必爭的賽局 共 30 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言